#!/usr/bin/env node

import { readFileSync, createWriteStream, existsSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
import archiver from 'archiver';

// 获取当前文件所在目录
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const projectRoot = join(__dirname, '..');

// 读取wxt.config.ts获取版本号
function getVersionFromConfig() {
  try {
    const configPath = join(projectRoot, 'wxt.config.ts');
    const configContent = readFileSync(configPath, 'utf8');
    
    // 使用正则表达式匹配version字段
    const versionMatch = configContent.match(/version:\s*['"`]([^'"`]+)['"`]/);
    if (versionMatch && versionMatch[1]) {
      return versionMatch[1];
    }
    
    throw new Error('无法从wxt.config.ts中找到version字段');
  } catch (error) {
    console.error('读取版本号失败:', error.message);
    process.exit(1);
  }
}

// 创建zip文件
function createZipFile(sourceDir, outputPath) {
  return new Promise((resolve, reject) => {
    const output = createWriteStream(outputPath);
    const archive = archiver('zip', {
      zlib: { level: 9 } // 最高压缩级别
    });

    output.on('close', () => {
      console.log(`✅ 打包完成: ${outputPath}`);
      console.log(`📦 总共压缩了 ${archive.pointer()} 字节`);
      resolve();
    });

    archive.on('error', (err) => {
      reject(err);
    });

    archive.pipe(output);
    
    // 将整个目录添加到zip中
    archive.directory(sourceDir, false);
    
    archive.finalize();
  });
}

async function main() {
  try {
    console.log('🚀 开始打包扩展程序...');
    
    // 获取版本号
    const version = getVersionFromConfig();
    console.log(`📋 当前版本: ${version}`);
    
    // 设置路径
    const sourceDir = join(projectRoot, 'dist', 'chrome-mv3');
    const outputPath = join(projectRoot, `WAAI${version}.zip`);
    
    // 检查源目录是否存在
    if (!existsSync(sourceDir)) {
      console.error(`❌ 源目录不存在: ${sourceDir}`);
      console.log('💡 请先运行 npm run build 构建项目');
      process.exit(1);
    }
    
    console.log(`📁 源目录: ${sourceDir}`);
    console.log(`📦 输出文件: ${outputPath}`);
    
    // 创建zip文件
    await createZipFile(sourceDir, outputPath);
    
    console.log('🎉 打包成功完成!');
  } catch (error) {
    console.error('❌ 打包失败:', error.message);
    process.exit(1);
  }
}

main(); 